import svelte from 'rollup-plugin-svelte';
import resolve from '@rollup/plugin-node-resolve';
import commonjs from '@rollup/plugin-commonjs';
import livereload from 'rollup-plugin-livereload';
import { terser } from 'rollup-plugin-terser';
import sass from 'node-sass';
const { dirname } = require('path')

const production = !process.env.ROLLUP_WATCH;

export default {
	input: 'src/main.js',
	output: {
		sourcemap: true,
		format: 'iife',
		name: 'app',
		file: 'public/build/bundle.js'
	},
	plugins: [
		svelte({
            preprocess: {
                style: async ({ content, attributes, filename }) => {
                    if (attributes.lang !== 'scss') return;
            
                    const { css, stats } = await new Promise((resolve, reject) => sass.render({
                        file: filename,
                        data: content,
                        includePaths: [
                            dirname(filename),
                        ],
                    }, (err, result) => {
                        if (err) reject(err);
                        else resolve(result);
                    }));
            
                    return {
                        code: css.toString(),
                        dependencies: stats.includedFiles
                    };
                }
            },
			// enable run-time checks when not in production
			dev: !production,
			// we'll extract any component CSS out into
			// a separate file - better for performance
			css: css => {
				css.write('public/build/bundle.css');
		    },
		    onwarn: (warning, handler) => {
				//console.log('看看'+warning.code)
				if (warning.code === 'a11y-autofocus'||'a11y-missing-attribute'||'non-top-level-reactive-declaration') return
				handler(warning)
			}
		}),
		// If you have external dependencies installed from
		// npm, you'll most likely need these plugins. In
		// some cases you'll need additional configuration -
		// consult the documentation for details:
		// https://github.com/rollup/plugins/tree/master/packages/commonjs
		resolve({
			browser: true,
			dedupe: ['svelte']
		}),
		commonjs(),

		// In dev mode, call `npm run start` once
		// the bundle has been generated
		!production && serve(),

		// Watch the `public` directory and refresh the
		// browser on changes when not in production
		!production && livereload('public'),

		// If we're building for production (npm run build
		// instead of npm run dev), minify
		production && terser()
	],
	watch: {
		clearScreen: false
	}
};

function serve() {
	let started = false;

	return {
		writeBundle() {
			if (!started) {
				started = true;
				require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], {
					stdio: ['ignore', 'inherit', 'inherit'],
					shell: true
				});
			}
		}
	};
}
